在centos7上启动firewall

您所在的位置:网站首页 centos firewall 关闭 在centos7上启动firewall

在centos7上启动firewall

2023-12-05 18:59| 来源: 网络整理| 查看: 265

背景

博主在阿里云服务器部署程序时,systemctl start firewalld打开防火墙,这个时候理应所有端口都不能访问(因为firewalld默认关闭所有端口),但是博主的22端口却依然能连接

问题

为什么firewalld打开后没有阻拦22端口和80端口

调研|测试|分析 使用nmap从本地测试服务器端口,发现是开放的使用docker部署完web应用,没有在防火墙打开80端口,但是外网可以直接访问服务器的web服务!在外网的机子上运行nmap -p 1-65535 115.29.188.135扫描所以端口,发现只有22端口和80端口是开放的;执行systemctl status firewalld -l查看防火墙状态,发现WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w10 -t filter -F DOCKER-ISOLATION-STAGE-2' failed: iptables: No chain/target/match by that name.web服务器可以访问而不被防火墙拦截的原因找到了,因为firewalld没有关于docker的拦截配置文件,而且博主运行容器时加了参数-p 80:80,因此firewalld没有成功拦截80端口的服务;使用Python在阿里服务器上写一个简单的脚本,监听9011端口 import threading import socket encoding = 'utf-8' BUFSIZE = 1024 # a read thread, read data from remote class Reader(threading.Thread): def __init__(self, client): threading.Thread.__init__(self) self.client = client def run(self): while True: data = self.client.recv(BUFSIZE) if(data): string = bytes.decode(data, encoding) print(string, end='') else: break print("close:", self.client.getpeername()) def readline(self): rec = self.inputs.readline() if rec: string = bytes.decode(rec, encoding) if len(string)>2: string = string[0:-2] else: string = ' ' else: string = False return string # a listen thread, listen remote connect # when a remote machine request to connect, it will create a read thread to handle class Listener(threading.Thread): def __init__(self, port): threading.Thread.__init__(self) self.port = port self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) self.sock.bind(("0.0.0.0", port)) self.sock.listen(0) def run(self): print("listener started") while True: client, cltadd = self.sock.accept() Reader(client).start() cltadd = cltadd print("accept a connect") lst = Listener(9011) # create a listen thread lst.start() # then start 在阿里服务器和外网上分别执行nmap -p 9000-9100 115.29.188.135, nmap -p 9000-9100 127.0.0.1,发现在外网扫描后没有开放的端口,在阿里的执行后9011是开放的在服务器上使用防火墙开放9011端口,再在外网扫描下端口,发现9011端口是开放的,在服务器的防火墙关闭9011端口,再在外网扫描,发现是关闭的,由此可知,防火墙是有效的,可以有效拦截端口!! 结论 防火墙systemctl start firewalld后是可以有效拦截所有端口的!防火墙不能拦截22端口是因为阿里的centos镜像做了优化或者说服务器系统上的防火墙默认开放22端口的,因为不开放用户就无法控制服务器,至于谁优化的不确定,我们知道这一点即可;防火墙不能拦截80端口的原因是,博主使用docker部署的应用,且run -p 80:80,而防火墙无拦截docker的规则,因此拦不住

参考

https://blog.csdn.net/u011846257/article/details/54707864https://blog.csdn.net/qq_41262248/article/details/80790993https://blog.csdn.net/fanren224/article/details/79693756


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3